// let num: any = 8 // 任意类型，不对类型进行校验
// num.toFixed() // 没有提示
// num = 'xxx' // 可以赋任意值（即可以把任意值给 any 类型）
// num.toFixed(2)

// let str
// function sum(a) {}

// let num: unknown = 88
// num = 'abc'
// console.log(num)
// num() // error: 不能调用方法
// console.log(num.length) // error: 不能访问属性

/* let num: unknown = 88
// unknown 可以配合类型收窄（把一个宽泛的类型缩小为更加具体的类型）去使用
// typeof 就是类型收窄的一种方式
if (typeof num === 'string') {
  num.length
} else if(typeof num === 'number') {
  num.toFixed(2)
} else if(typeof num === 'function') {
  num()
} */

// 并不是所有的类型都可以收窄（宽泛的类型（包含具体的类型） -> 具体的类型）
/* let num = 'hello' // num 的类型已经确定就是 string 类型
if (typeof num === 'string') {
  console.log(num.length)
} else if (typeof num === 'function') {
  // 如果再等于了 function 类型，那是不可能的，所以 num 被推断为了 never 类型
  num() // Error
} */

let num: unknown = 88

if(typeof num === 'string') {
  num.length
}
// 类型断言也是类型收窄的一种方式
// let aaa = 8
;(num as string).length

export {}